#include"chat.h"

int SockDeal()//创建、连接套接字
{
        int sock=socket(AF_INET,SOCK_STREAM,0);
        if(sock<0)
        {
                perror("socket error");
                exit(1);
        }
        struct sockaddr_in server;
        server.sin_family=AF_INET;
        server.sin_port=htons(PORT);
        server.sin_addr.s_addr=inet_addr(IP);

        if(connect(sock,(struct sockaddr*)&server,sizeof(server))<0)
        {
                perror("connet error");
                exit(2);
        }
        return sock;
}

void MsgDeal(int sock,char*name)//处理消息
{
        char buf[NAMESIZE+MSGSIZE]={0};
        User user;

        while(1)//消息循环收发
        {
                fflush(stdout);
                memset(buf,0,NAMESIZE+MSGSIZE);
                memset(user.msg,0,MSGSIZE);
                fcntl(0,F_SETFL,FNDELAY);//sock置为非阻塞
                int read_size=read(0,user.msg,MSGSIZE);
                if(read_size>0)
                {
                        strcpy(buf,name);  
                        strcpy(buf+NAMESIZE,user.msg);   
                        if(send(sock,buf,NAMESIZE+MSGSIZE,MSG_DONTWAIT)<0)
                        {
                                perror("send error");
                                exit(1);
                        }
                }
                int recv_size=recv(sock,buf,NAMESIZE+MSGSIZE,MSG_DONTWAIT);
                if(recv_size>0)
                {
                memset(user.name,0,NAMESIZE);
                memset(user.msg,0,MSGSIZE);
                        strcpy(user.name,buf);
                        strcpy(user.msg,buf+NAMESIZE);
                        printf("%s 说: %s",user.name,user.msg);
                }
        } 
        close(sock);

}


int main(int argc,char *argv[])
{
        if(argc!=2)
        {
                perror("input format error");
                exit(1);
        }
        int sock=SockDeal();

        MsgDeal(sock,argv[1]);

        close(sock);
        return 0;
}
